ByRef এবং ByVal এর পার্থক্য
VBA তে ByRef এবং ByVal দুটি শব্দ প্যারামিটার পাস করার পদ্ধতি নির্দেশ করে। এই দুটি পদ্ধতির মধ্যে পার্থক্য হল, এগুলি কিভাবে আর্গুমেন্ট বা প্যারামিটারকে সাবরুটিন বা ফাংশনে পাস করা হয় এবং পাস করার পর মূল ভেরিয়েবলের মান কিভাবে পরিবর্তিত হয়।
ByVal (By Value)
- ByVal দিয়ে একটি ভেরিয়েবল পাস করার অর্থ হল যে, ফাংশন বা সাবরুটিনে ভেরিয়েবলের একটি কপি পাঠানো হয়। এর মানে, মূল ভেরিয়েবলটি ফাংশন বা সাবরুটিনের ভিতর পরিবর্তিত হলে তার কোনো প্রভাব মূল ভেরিয়েবলে পড়ে না।
- এটি মূল ভেরিয়েবলের একটি কপি ব্যবহার করে এবং সেই কপি ভেরিয়েবলটি ফাংশন বা সাবরুটিনের ভিতরে পরিবর্তিত হয়, কিন্তু মূল ভেরিয়েবলটি অপরিবর্তিত থাকে।
উদাহরণ:
Sub ExampleByVal()
Dim num As Integer
num = 10
MsgBox "Before calling function: " & num ' 10
Call ChangeValueByVal(num)
MsgBox "After calling function: " & num ' 10
End Sub
Sub ChangeValueByVal(ByVal val As Integer)
val = 20
End Subএখানে, num এর মান ১০ ছিল এবং ByVal প্যারামিটার হিসাবে পাস করার কারণে, ChangeValueByVal ফাংশনে val এর মান ২০ হলেও, num এর মান পরিবর্তিত হয় না। তাই, ফাংশন কল করার পর num এর মান আবারও ১০ থাকবে।
ByRef (By Reference)
- ByRef দিয়ে একটি ভেরিয়েবল পাস করার অর্থ হল যে, ফাংশন বা সাবরুটিনে ভেরিয়েবলের সরাসরি রেফারেন্স পাঠানো হয়। এর মানে, ফাংশন বা সাবরুটিনে যদি ভেরিয়েবলের মান পরিবর্তিত হয়, তবে সেই পরিবর্তন মূল ভেরিয়েবলে প্রভাব ফেলে।
- এটি মূল ভেরিয়েবলের অস্তিত্ব ব্যবহার করে এবং এই ভেরিয়েবলটির মান ফাংশন বা সাবরুটিনে পরিবর্তিত হলে, সেই পরিবর্তন মূল ভেরিয়েবলেও প্রতিফলিত হয়।
উদাহরণ:
Sub ExampleByRef()
Dim num As Integer
num = 10
MsgBox "Before calling function: " & num ' 10
Call ChangeValueByRef(num)
MsgBox "After calling function: " & num ' 20
End Sub
Sub ChangeValueByRef(ByRef val As Integer)
val = 20
End Subএখানে, num এর মান ১০ ছিল এবং ByRef প্যারামিটার হিসাবে পাস করার কারণে, ChangeValueByRef ফাংশনে val এর মান ২০ করার ফলে, num এর মানও পরিবর্তিত হয়ে ২০ হয়ে গেছে।
ByRef এবং ByVal এর মধ্যে প্রধান পার্থক্য
| কিছু বিষয় | ByVal | ByRef |
|---|---|---|
| প্যারামিটার পাস করা হয় | ভেরিয়েবলের একটি কপি পাস করা হয় | ভেরিয়েবলের রেফারেন্স পাস করা হয় |
| মূল ভেরিয়েবলের মানে পরিবর্তন | না, কপি পরিবর্তন হলেও মূল ভেরিয়েবলের মান পরিবর্তন হয় না | হ্যাঁ, ফাংশনে পরিবর্তিত হলে মূল ভেরিয়েবলের মানও পরিবর্তিত হয় |
| ব্যবহার | যখন মূল ভেরিয়েবলের মান অপরিবর্তিত রাখতে চান | যখন মূল ভেরিয়েবলের মান পরিবর্তন করতে চান |
সারাংশ
- ByVal: প্যারামিটার পাস করার সময় মূল ভেরিয়েবলের একটি কপি তৈরি হয় এবং ফাংশন বা সাবরুটিনের ভিতরে পরিবর্তন হলে মূল ভেরিয়েবলে কোনো প্রভাব পড়ে না।
- ByRef: প্যারামিটার পাস করার সময় মূল ভেরিয়েবলের সরাসরি রেফারেন্স পাস হয় এবং ফাংশন বা সাবরুটিনে পরিবর্তন হলে এটি মূল ভেরিয়েবলে প্রভাব ফেলে।
এটি গুরুত্বপূর্ণ কারণ কখনো কখনো আপনি চাইবেন প্যারামিটার হিসেবে পাস করা ভেরিয়েবলের মান ফাংশনে পরিবর্তিত না হোক (তখন ByVal ব্যবহার করুন), আর কখনো আপনি চাইবেন ফাংশনে পরিবর্তিত হলে মূল ভেরিয়েবলে সেই পরিবর্তন প্রভাব ফেলুক (তখন ByRef ব্যবহার করুন)।
Read more